home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / playershoot.s < prev    next >
Text File  |  1997-11-28  |  15KB  |  1,009 lines

  1.  
  2. PLR1_clicked: dc.b 0
  3. PLR2_clicked: dc.b 0
  4. popping: ds.l 5*4
  5. targdist: dc.w 0
  6. targetydiff: dc.l 0
  7. PLR1_TimeToShoot: dc.w 0
  8. PLR2_TimeToShoot: dc.w 0
  9.  
  10. MaxFrame: dc.w 0
  11.  
  12. Player1Shot:
  13.  
  14.  tst.w PLR1_TimeToShoot
  15.  beq.s okcanfire
  16.  
  17.  move.w TempFrames,d0
  18.  sub.w d0,PLR1_TimeToShoot
  19.  bge PLR1_nofire
  20.  move.w #0,PLR1_TimeToShoot
  21.  bra PLR1_nofire
  22.  
  23. okcanfire:
  24.  
  25.  lea PLR1_GunData,a6
  26.  moveq #0,d0
  27.  move.b p1_gunselected,d0
  28.  move.b d0,tempgun
  29.  
  30.  move.l #GunAnims,a0
  31.  move.b 7(a0,d0.w*8),MaxFrame
  32.  
  33.  lsl.w #2,d0
  34.  lea (a6,d0.w*8),a6
  35.  move.w 14(a6),BulletSpd
  36.  
  37.  tst.w 12(a6)
  38.  beq.s .itsaclick
  39.  
  40.  tst.b p1_fire
  41.  beq PLR1_nofire
  42.  bra .itsahold
  43.  
  44. .itsaclick:
  45.  tst.b p1_clicked
  46.  beq PLR1_nofire
  47.  
  48. .itsahold:
  49.  
  50.  move.w PLR1_angpos,d0
  51.  move.l #SineTable,a0
  52.  lea (a0,d0.w),a0
  53.  move.w (a0),tempxdir 
  54.  move.w 2048(a0),tempzdir
  55.  move.w PLR1_xoff,tempxoff
  56.  move.w PLR1_zoff,tempzoff
  57.  move.l PLR1_yoff,tempyoff
  58.  add.l #20*128,tempyoff
  59.  move.b PLR1_StoodInTop,tempStoodInTop
  60.  move.l PLR1_Roompt,tempRoompt
  61.  move.l #%1111111111110111000001,d7
  62.  move.w #-1,d0
  63.  move.l #0,targetydiff
  64.  move.l #$7fff,d1
  65.  
  66.  move.l ZoneAdds,a3
  67.  
  68.  move.l #PLR1_ObsInLine,a1
  69.  move.l ObjectData,a0
  70.  move.l #PLR1_ObjDists,a2
  71. findclosestinline
  72.  tst.w (a0)
  73.  blt outofline
  74.  tst.b (a1)+
  75.  beq.s notlinedup
  76.  btst #0,17(a0)
  77.  beq.s notlinedup
  78.  tst.w 12(a0)
  79.  blt.s notlinedup
  80.  move.b 16(a0),d6
  81.  btst d6,d7
  82.  beq.s notlinedup
  83.  tst.b numlives(a0)
  84.  beq.s notlinedup
  85.  move.w (a0),d5
  86.  move.w (a2,d5.w*2),d6
  87.  move.w 4(a0),d2
  88.  ext.l d2
  89.  asl.l #7,d2
  90.  sub.l PLR1_yoff,d2
  91.  move.l d2,d3
  92.  bge.s .oknotneg
  93.  neg.l d2
  94. .oknotneg:
  95.  divs #44,d2
  96.  cmp.w d6,d2
  97.  bgt.s notlinedup
  98.  
  99.  cmp.w d6,d1
  100.  blt.s notlinedup
  101.  move.w d6,d1
  102.  move.l a0,a5
  103.  
  104. ; We have a closer enemy lined up.
  105.  move.l d3,targetydiff 
  106.  move.w d5,d0
  107.  
  108. notlinedup:
  109.  add.w #64,a0
  110.  bra findclosestinline
  111.  
  112. outofline:
  113.  
  114.  
  115.  move.w d1,targdist
  116.  
  117.  move.l targetydiff,d5
  118.  sub.l PLR1_height,d5
  119.  add.l #18*256,d5
  120.  move.w d1,closedist
  121.  
  122.  move.w BulletSpd,d2
  123.  asr.w d2,d1
  124.  tst.w d1
  125.  bgt.s okdistthing
  126.  moveq #1,d1
  127. okdistthing
  128.  divs d1,d5
  129.  move.w d5,bulyspd
  130.  
  131.  move.w (a6),d2
  132.  moveq #0,d1
  133.  move.b 2(a6),d1
  134.  cmp.w d1,d2
  135.  bge.s .okcanshoot
  136.  
  137.  move.l PLR1_Obj,a2
  138.  move.w (a2),d0
  139.  move.l #ObjRotated,a2
  140.  move.l (a2,d0.w*8),Noisex
  141.  move.w #300,Noisevol
  142.  move.w #100,PLAYERNOISEVOL
  143.  move.b #12,Samplenum+1
  144.  clr.b notifplaying
  145.  move.b #$fb,IDNUM
  146.  jsr MakeSomeNoise
  147.  
  148.  rts
  149.  
  150. .okcanshoot:
  151.  
  152.  move.w 8(a6),PLR1_TimeToShoot
  153.  
  154.  move.b MaxFrame,PLR1_GunFrame
  155.  sub.w d1,d2
  156.  move.w d2,(a6)
  157.  
  158.  move.l PLR1_Obj,a2
  159.  move.w (a2),d2
  160.  move.l #ObjRotated,a2
  161.  move.l (a2,d2.w*8),Noisex
  162.  move.w #100,PLAYERNOISEVOL
  163.  move.w #300,Noisevol
  164.  move.b 3(a6),Samplenum+1
  165.  move.b #2,chanpick
  166.  clr.b notifplaying
  167.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  168.  move.b #$fb,IDNUM
  169.  jsr MakeSomeNoise
  170.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  171.  
  172.  tst.w d0
  173.  blt nothingtoshoot
  174.  
  175.  tst.b 5(a6)
  176.  beq PLR1FIREBULLET
  177.  
  178. ; instant effect: check for hitting:
  179.  
  180.  move.w 22(a6),d7
  181.  
  182. FIREBULLETS:
  183.  
  184.  movem.l a0/a1/d7/d0/a5,-(a7)
  185.  jsr GetRand
  186.  
  187.  move.l ObjectPoints,a1
  188.  move.w (a5),d1
  189.  lea (a1,d1.w*8),a1
  190.  
  191.  and.w #$7fff,d0
  192.  move.w (a1),d1
  193.  sub.w PLR1_xoff,d1
  194.  muls d1,d1
  195.  move.w 4(a1),d2
  196.  sub.w PLR1_zoff,d2
  197.  muls d2,d2
  198.  add.l d2,d1
  199.  asr.l #6,d1
  200.  ext.l d0
  201.  asl.l #1,d0
  202.  cmp.l d1,d0
  203.  bgt.s .hitplr
  204.  
  205.  movem.l (a7)+,a0/a1/d7/d0/a5
  206.  move.l d0,-(a7)
  207.  bsr PLR1MISSINSTANT
  208.  move.l (a7)+,d0
  209.  
  210.  bra.s .missplr
  211. .hitplr: 
  212.  
  213.  movem.l (a7)+,a0/a1/d7/d0/a5
  214.  move.l d0,-(a7)
  215.  bsr PLR1HITINSTANT
  216.  move.l (a7)+,d0
  217.  
  218. .missplr:
  219.  
  220.  subq #1,d7
  221.  bgt.s FIREBULLETS
  222.  
  223.  rts
  224.  
  225. nothingtoshoot:
  226.  move.w #0,bulyspd
  227.  tst.b 5(a6)
  228.  beq PLR1FIREBULLET
  229.  
  230.  move.w #0,bulyspd
  231.  
  232.  move.w PLR1_xoff,oldx
  233.  move.w PLR1_zoff,oldz
  234.  move.w PLR1_sinval,d0
  235.  asr.w #7,d0
  236.  add.w oldx,d0
  237.  move.w d0,newx
  238.  move.w PLR1_cosval,d0
  239.  asr.w #7,d0
  240.  add.w oldz,d0
  241.  move.w d0,newz
  242.  move.l PLR1_yoff,d0
  243.  add.l #20*128,d0
  244.  move.l d0,oldy
  245.  
  246.  move.l d0,d1
  247.  jsr GetRand
  248.  and.w #$fff,d0
  249.  sub.w #$800,d0
  250.  ext.l d0
  251.  add.l d0,d1
  252.  
  253.  move.l oldy,TESTY
  254.  
  255.  move.l d1,newy
  256.  move.l newy,TESTY+4
  257.  
  258.  st exitfirst
  259.  clr.b wallbounce
  260.  move.w #0,extlen
  261.  move.b #$ff,awayfromwall
  262.  move.w #%0000010000000000,wallflags
  263.  move.l #0,StepUpVal
  264.  move.l #$1000000,StepDownVal
  265.  move.l #0,thingheight
  266.  move.l PLR1_Roompt,objroom
  267.  movem.l d0-d7/a0-a6,-(a7)
  268.  
  269. .again:
  270.  jsr MoveObject
  271.  tst.b hitwall
  272.  bne.s .nofurther
  273.  move.w newx,d0
  274.  sub.w oldx,d0
  275.  add.w d0,oldx
  276.  add.w d0,newx
  277.  move.w newz,d0
  278.  sub.w oldz,d0
  279.  add.w d0,oldz
  280.  add.w d0,newz
  281.  move.l newy,d0
  282.  sub.l oldy,d0
  283.  add.l d0,oldy
  284.  add.l d0,newy
  285.  bra .again
  286.  
  287. .nofurther:
  288.  
  289.  movem.l (a7)+,d0-d7/a0-a6
  290.  
  291.  move.l PlayerShotData,a0
  292.  move.w #19,d1
  293. .findonefree2
  294.  move.w 12(a0),d2
  295.  blt.s .foundonefree2
  296.  adda.w #64,a0
  297.  dbra d1,.findonefree2
  298.  
  299.  rts
  300.  
  301. .foundonefree2:
  302.  
  303.  move.l ObjectPoints,a1
  304.  move.w (a0),d2
  305.  move.w newx,(a1,d2.w*8)
  306.  move.w newz,4(a1,d2.w*8)
  307.  move.b #1,shotstatus(a0)
  308.  move.w #0,shotgrav(a0)
  309.  move.b p1_gunselected,shotsize(a0)
  310.  move.b #0,shotanim(a0)
  311.  
  312.  move.l objroom,a1
  313.  move.w (a1),12(a0)
  314.  st worry(a0)
  315.  move.l wallhitheight,d0
  316.  move.l newy,TESTY+8
  317.  move.l d0,TESTY+12
  318.  move.l d0,accypos(a0)
  319.  asr.l #7,d0
  320.  move.w d0,4(a0)
  321.  
  322.  rts
  323.  
  324. PLR1_nofire:
  325.  
  326.  rts
  327.  
  328. TESTY: dc.l 0,0,0,0
  329.  
  330. Player2Shot:
  331.  
  332.  tst.w PLR2_TimeToShoot
  333.  beq.s okcanfire2
  334.  
  335.  move.w TempFrames,d0
  336.  sub.w d0,PLR2_TimeToShoot
  337.  bge PLR2_nofire
  338.  move.w #0,PLR2_TimeToShoot
  339.  bra PLR2_nofire
  340.  
  341. okcanfire2:
  342.  
  343.  
  344.  lea PLR2_GunData,a6
  345.  moveq #0,d0
  346.  move.b p2_gunselected,d0
  347.  move.b d0,tempgun
  348.  
  349.  move.l #GunAnims,a0
  350.  move.b 7(a0,d0.w*8),MaxFrame
  351.  
  352.  lsl.w #2,d0
  353.  lea (a6,d0.w*8),a6
  354.  move.w 14(a6),BulletSpd
  355.  
  356.  tst.w 12(a6)
  357.  beq.s .itsaclick
  358.  
  359.  tst.b p2_fire
  360.  beq PLR2_nofire
  361.  bra .itsahold
  362.  
  363. .itsaclick:
  364.  tst.b p2_clicked
  365.  beq PLR2_nofire
  366.  
  367. .itsahold:
  368.  
  369.  move.w PLR2_angpos,d0
  370.  move.l #SineTable,a0
  371.  lea (a0,d0.w),a0
  372.  move.w (a0),tempxdir 
  373.  move.w 2048(a0),tempzdir
  374.  move.w PLR2_xoff,tempxoff
  375.  move.w PLR2_zoff,tempzoff
  376.  move.l PLR2_yoff,tempyoff
  377.  add.l #20*128,tempyoff
  378.  move.b PLR2_StoodInTop,tempStoodInTop
  379.  move.l PLR2_Roompt,tempRoompt
  380.  move.l #%1111111111010111100001,d7
  381.  move.w #-1,d0
  382.  move.l #0,targetydiff
  383.  move.l #$7fff,d1
  384.  
  385.  move.l ZoneAdds,a3
  386.  
  387.  move.l #PLR2_ObsInLine,a1
  388.  move.l ObjectData,a0
  389.  move.l #PLR2_ObjDists,a2
  390. findclosestinline2
  391.  tst.w (a0)
  392.  blt outofline2
  393.  tst.b (a1)+
  394.  beq.s notlinedup2
  395.  btst #1,17(a0)
  396.  beq.s notlinedup2
  397.  tst.w 12(a0)
  398.  blt.s notlinedup2
  399.  move.b 16(a0),d6
  400.  btst d6,d7
  401.  beq.s notlinedup2
  402.  tst.b numlives(a0)
  403.  beq.s notlinedup2
  404.  move.w (a0),d5
  405.  move.w (a2,d5.w*2),d6
  406.  move.w 4(a0),d2
  407.  ext.l d2
  408.  asl.l #7,d2
  409.  sub.l PLR2_yoff,d2
  410.  move.l d2,d3
  411.  bge.s .oknotneg
  412.  neg.l d2
  413. .oknotneg:
  414.  divs #44,d2
  415.  cmp.w d6,d2
  416.  bgt.s notlinedup2
  417.  
  418.  cmp.w d6,d1
  419.  blt.s notlinedup2
  420.  move.w d6,d1
  421.  move.l a0,a5
  422.  
  423. ; We have a closer enemy lined up.
  424.  move.l d3,targetydiff 
  425.  move.w d5,d0
  426.  
  427. notlinedup2:
  428.  add.w #64,a0
  429.  bra findclosestinline2
  430.  
  431. outofline2:
  432.  
  433.  
  434.  move.w d1,targdist
  435.  
  436.  move.l targetydiff,d5
  437.  sub.l PLR2_height,d5
  438.  add.l #18*256,d5
  439.  move.w d1,closedist
  440.  
  441.  move.w BulletSpd,d2
  442.  asr.w d2,d1
  443.  tst.w d1
  444.  bgt.s okdistthing2
  445.  moveq #1,d1
  446. okdistthing2
  447.  divs d1,d5
  448.  move.w d5,bulyspd
  449.  
  450.  move.w (a6),d2
  451.  moveq #0,d1
  452.  move.b 2(a6),d1
  453.  cmp.w d1,d2
  454.  bge.s .okcanshoot
  455.  
  456.  move.l PLR2_Obj,a2
  457.  move.w (a2),d0
  458.  move.l #ObjRotated,a2
  459.  move.l (a2,d0.w*8),Noisex
  460.  move.w #300,Noisevol
  461.  move.b #12,Samplenum+1
  462.  clr.b notifplaying
  463.  move.b #$fb,IDNUM
  464.  jsr MakeSomeNoise
  465.  
  466.  rts
  467.  
  468. .okcanshoot:
  469.  
  470.  move.w 8(a6),PLR2_TimeToShoot
  471.  
  472.  move.b MaxFrame,PLR2_GunFrame
  473.  sub.w d1,d2
  474.  move.w d2,(a6)
  475.  
  476.  move.l PLR2_Obj,a2
  477.  move.w (a2),d2
  478.  move.l #ObjRotated,a2
  479.  move.l (a2,d2.w*8),Noisex
  480.  move.w #300,Noisevol
  481.  move.b 3(a6),Samplenum+1
  482.  move.b #2,chanpick
  483.  clr.b notifplaying
  484.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  485.  move.b #$fb,IDNUM
  486.  jsr MakeSomeNoise
  487.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  488.  
  489.  tst.w d0
  490.  blt nothingtoshoot2
  491.  
  492.  tst.b 5(a6)
  493.  beq PLR2FIREBULLET
  494.  
  495. ; instant effect: check for hitting:
  496.  
  497.  move.w 22(a6),d7
  498.  
  499. FIREBULLETS2:
  500.  
  501.  movem.l a0/a1/d7/d0/a5,-(a7)
  502.  jsr GetRand
  503.  
  504.  move.l ObjectPoints,a1
  505.  move.w (a5),d1
  506.  lea (a1,d1.w*8),a1
  507.  
  508.  and.w #$7fff,d0
  509.  move.w (a1),d1
  510.  sub.w PLR2_xoff,d1
  511.  muls d1,d1
  512.  move.w 4(a1),d2
  513.  sub.w PLR2_zoff,d2
  514.  muls d2,d2
  515.  add.l d2,d1
  516.  asr.l #6,d1
  517.  ext.l d0
  518.  asl.l #1,d0
  519.  cmp.l d1,d0
  520.  bgt.s .hitplr
  521.  
  522.  movem.l (a7)+,a0/a1/d7/d0/a5
  523.  move.l d0,-(a7)
  524.  bsr PLR2MISSINSTANT
  525.  move.l (a7)+,d0
  526.  
  527.  bra.s .missplr
  528. .hitplr: 
  529.  
  530.  movem.l (a7)+,a0/a1/d7/d0/a5
  531.  move.l d0,-(a7)
  532.  bsr PLR2HITINSTANT
  533.  move.l (a7)+,d0
  534.  
  535. .missplr:
  536.  
  537.  subq #1,d7
  538.  bgt.s FIREBULLETS2
  539.  
  540.  rts
  541.  
  542. nothingtoshoot2:
  543.  move.w #0,bulyspd
  544.  tst.b 5(a6)
  545.  beq PLR2FIREBULLET
  546.  
  547.  move.w #0,bulyspd
  548.  
  549.  move.w PLR2_xoff,oldx
  550.  move.w PLR2_zoff,oldz
  551.  move.w PLR2_sinval,d0
  552.  asr.w #7,d0
  553.  add.w oldx,d0
  554.  move.w d0,newx
  555.  move.w PLR2_cosval,d0
  556.  asr.w #7,d0
  557.  add.w oldz,d0
  558.  move.w d0,newz
  559.  move.l PLR2_yoff,d0
  560.  add.l #20*128,d0
  561.  move.l d0,oldy
  562.  
  563.  move.l d0,d1
  564.  jsr GetRand
  565.  and.w #$fff,d0
  566.  sub.w #$800,d0
  567.  ext.l d0
  568.  add.l d0,d1
  569.  
  570.  move.l d1,newy
  571.  
  572.  st exitfirst
  573.  clr.b wallbounce
  574.  move.w #0,extlen
  575.  move.b #$ff,awayfromwall
  576.  move.w #%0000010000000000,wallflags
  577.  move.l #0,StepUpVal
  578.  move.l #$1000000,StepDownVal
  579.  move.l #0,thingheight
  580.  move.l PLR2_Roompt,objroom
  581.  movem.l d0-d7/a0-a6,-(a7)
  582.  
  583. .again:
  584.  jsr MoveObject
  585.  tst.b hitwall
  586.  bne.s .nofurther
  587.  move.w newx,d0
  588.  sub.w oldx,d0
  589.  add.w d0,oldx
  590.  add.w d0,newx
  591.  move.w newz,d0
  592.  sub.w oldz,d0
  593.  add.w d0,oldz
  594.  add.w d0,newz
  595.  move.l newy,d0
  596.  sub.l oldy,d0
  597.  add.l d0,oldy
  598.  add.l d0,newy
  599.  bra .again
  600.  
  601. .nofurther:
  602.  
  603.  movem.l (a7)+,d0-d7/a0-a6
  604.  
  605.  move.l PlayerShotData,a0
  606.  move.w #19,d1
  607. .findonefree2
  608.  move.w 12(a0),d2
  609.  blt.s .foundonefree2
  610.  adda.w #64,a0
  611.  dbra d1,.findonefree2
  612.  
  613.  rts
  614.  
  615. .foundonefree2:
  616.  
  617.  move.l ObjectPoints,a1
  618.  move.w (a0),d2
  619.  move.w newx,(a1,d2.w*8)
  620.  move.w newz,4(a1,d2.w*8)
  621.  move.b #1,shotstatus(a0)
  622.  move.w #0,shotgrav(a0)
  623.  move.b p2_gunselected,shotsize(a0)
  624.  move.b #0,shotanim(a0)
  625.  
  626.  move.l objroom,a1
  627.  move.w (a1),12(a0)
  628.  st worry(a0)
  629.  move.l wallhitheight,d0
  630.  move.l d0,accypos(a0)
  631.  asr.l #7,d0
  632.  move.w d0,4(a0)
  633.  
  634.  rts
  635.  
  636. PLR2_nofire:
  637.  
  638.  rts
  639.  
  640.  
  641. BulletSpd: dc.w 0
  642.  
  643. *******************************************************
  644.  
  645. tempyoff: dc.l 0
  646. tempStoodInTop: dc.w 0
  647. tempangpos: dc.w 0
  648. tempxdir: dc.w 0
  649. tempzdir: dc.w 0
  650. tempgun: dc.w 0
  651. tstfire: dc.w 0
  652. PLR1FIREBULLET:
  653.  
  654.  move.w #256,d6
  655.  move.w #256,d5
  656.  
  657.  move.b MaxFrame,PLR1_GunFrame
  658.  move.l PLR1_Obj,a2
  659.  bra firefive
  660.  
  661. PLR2FIREBULLET:
  662.  
  663.  move.b MaxFrame,PLR2_GunFrame
  664.  move.l PLR2_Obj,a2
  665.  
  666. firefive:
  667.  
  668.  move.l PlayerShotData,a0
  669.  move.w #19,d1
  670. .findonefree
  671.  move.w 12(a0),d0
  672.  blt.s .foundonefree
  673.  adda.w #64,a0
  674.  dbra d1,.findonefree
  675.  
  676.  rts
  677.  
  678. .foundonefree
  679.  move.w 16(a6),shotgrav(a0)
  680.  move.w 18(a6),shotflags(a0)
  681.  
  682.  move.w bulyspd,d0
  683.  
  684.  cmp.w #20*128,d0
  685.  blt.s .okdownspd
  686.  move.w #20*128,d0
  687. .okdownspd:
  688.  
  689.  cmp.w #-20*128,d0
  690.  bgt.s .okupspd
  691.  move.w #-20*128,d0
  692. .okupspd:
  693.  
  694.  add.w 20(a6),d0
  695.  
  696.  move.w d0,bulyspd
  697.  
  698.  move.l #ObjRotated,a2
  699.  move.b tempgun,shotsize(a0)
  700.  move.b 6(a6),shotpower(a0)
  701.  
  702.  move.l ObjectPoints,a1
  703.  move.w (a0),d1
  704.  lea (a1,d1.w*8),a1
  705.  move.w tempxoff,(a1)
  706.  move.w tempzoff,4(a1)
  707.  move.w tempxdir,d0
  708.  ext.l d0
  709.  
  710.  move.w BulletSpd,d1
  711.  asl.l d1,d0
  712.  move.l d0,shotxvel(a0)
  713.  move.w tempzdir,d0
  714.  ext.l d0
  715.  asl.l d1,d0
  716.  move.l d0,shotzvel(a0)
  717.  move.w bulyspd,shotyvel(a0)
  718.  move.b tempStoodInTop,ObjInTop(a0)
  719.  move.w #0,shotlife(a0)
  720.  move.l #%11,EnemyFlags(a0)
  721.  move.l tempRoompt,a2
  722.  move.w (a2),12(a0)
  723.  move.l tempyoff,d0
  724.  add.l #20*128,d0
  725.  move.l d0,accypos(a0)
  726.  st worry(a0)
  727.  asr.l #7,d0
  728.  move.w d0,4(a0)
  729.  
  730.  rts
  731.  
  732. PLR1HITINSTANT:
  733.  
  734. ; Just blow it up.
  735.  
  736.  move.l PlayerShotData,a0
  737.  move.w #19,d1
  738. .findonefree
  739.  move.w 12(a0),d2
  740.  blt.s .foundonefree
  741.  adda.w #64,a0
  742.  dbra d1,.findonefree
  743.  
  744.  rts
  745.  
  746. .foundonefree:
  747.  
  748.  move.l ObjectPoints,a1
  749.  move.w (a0),d2
  750.  move.l (a1,d0.w*8),(a1,d2.w*8)
  751.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  752.  move.b #1,shotstatus(a0)
  753.  move.w #0,shotgrav(a0)
  754.  move.b p1_gunselected,shotsize(a0)
  755.  move.b #0,shotanim(a0)
  756.  
  757.  move.w 4(a5),d1
  758.  ext.l d1
  759.  asl.l #7,d1
  760.  move.l d1,accypos(a0)
  761.  move.w 12(a5),12(a0)
  762.  st worry(a0)
  763.  move.w 4(a5),4(a0)
  764.  
  765.  move.b 6(a6),d0
  766.  add.b d0,damagetaken(a5)
  767.  
  768.  move.w tempxdir,d1
  769.  ext.l d1
  770.  asl.l #3,d1
  771.  swap d1
  772.  move.w d1,ImpactX(a5)
  773.  move.w tempzdir,d1
  774.  ext.l d1
  775.  asl.l #3,d1
  776.  swap d1
  777.  move.w d1,ImpactZ(a5)
  778.  
  779.  rts
  780.  
  781. PLR1MISSINSTANT: 
  782.  
  783.  move.w PLR1_xoff,oldx
  784.  move.w PLR1_zoff,oldz
  785.  move.l PLR1_yoff,d1
  786.  add.l #20*128,d1
  787.  move.l d1,oldy
  788.  
  789.  move.w (a5),d0
  790.  move.l ObjectPoints,a1
  791.  move.w (a1,d0.w*8),d2
  792.  sub.w oldx,d2
  793.  asr.w #1,d2
  794.  add.w oldx,d2
  795.  move.w d2,newx
  796.  move.w 4(a1,d0.w*8),d2
  797.  sub.w oldz,d2
  798.  asr.w #1,d2
  799.  add.w oldz,d2
  800.  move.w d2,newz
  801.  
  802.  move.w 4(a0),d2
  803.  ext.l d2
  804.  asl.l #7,d2
  805.  move.l d2,newy
  806.  
  807.  st exitfirst
  808.  clr.b wallbounce
  809.  move.w #0,extlen
  810.  move.b #$ff,awayfromwall
  811.  move.w #%0000010000000000,wallflags
  812.  move.l #0,StepUpVal
  813.  move.l #$1000000,StepDownVal
  814.  move.l #0,thingheight
  815.  move.l PLR1_Roompt,objroom
  816.  movem.l d0-d7/a0-a6,-(a7)
  817.  
  818. .again:
  819.  jsr MoveObject
  820.  tst.b hitwall
  821.  bne.s .nofurther
  822.  move.w newx,d1
  823.  sub.w oldx,d1
  824.  add.w d1,oldx
  825.  add.w d1,newx
  826.  move.w newz,d1
  827.  sub.w oldz,d1
  828.  add.w d1,oldz
  829.  add.w d1,newz
  830.  move.l newy,d1
  831.  sub.l oldy,d1
  832.  add.l d1,oldy
  833.  add.l d1,newy
  834.  bra .again
  835.  
  836. .nofurther:
  837.  
  838.  movem.l (a7)+,d0-d7/a0-a6
  839.  
  840.  move.l PlayerShotData,a0
  841.  move.w #19,d1
  842. .findonefree2
  843.  move.w 12(a0),d2
  844.  blt.s .foundonefree2
  845.  adda.w #64,a0
  846.  dbra d1,.findonefree2
  847.  
  848.  rts
  849.  
  850. .foundonefree2:
  851.  
  852.  move.l ObjectPoints,a1
  853.  move.w (a0),d2
  854.  move.w newx,(a1,d2.w*8)
  855.  move.w newz,4(a1,d2.w*8)
  856.  move.b #1,shotstatus(a0)
  857.  move.w #0,shotgrav(a0)
  858.  move.b p1_gunselected,shotsize(a0)
  859.  move.b #0,shotanim(a0)
  860.  
  861.  move.l objroom,a1
  862.  move.w (a1),12(a0)
  863.  st worry(a0)
  864.  move.l newy,d1
  865.  move.l d1,accypos(a0)
  866.  asr.l #7,d1
  867.  move.w d1,4(a0)
  868.  
  869.  rts
  870.  
  871.  
  872. PLR2HITINSTANT:
  873.  
  874. ; Just blow it up.
  875.  
  876.  move.l PlayerShotData,a0
  877.  move.w #19,d1
  878. .findonefree
  879.  move.w 12(a0),d2
  880.  blt.s .foundonefree
  881.  adda.w #64,a0
  882.  dbra d1,.findonefree
  883.  
  884.  rts
  885.  
  886. .foundonefree:
  887.  
  888.  move.l ObjectPoints,a1
  889.  move.w (a0),d2
  890.  move.l (a1,d0.w*8),(a1,d2.w*8)
  891.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  892.  move.b #1,shotstatus(a0)
  893.  move.w #0,shotgrav(a0)
  894.  move.b p2_gunselected,shotsize(a0)
  895.  move.b #0,shotanim(a0)
  896.  
  897.  move.w 4(a5),d1
  898.  ext.l d1
  899.  asl.l #7,d1
  900.  move.l d1,accypos(a0)
  901.  move.w 12(a5),12(a0)
  902.  st worry(a0)
  903.  move.w 4(a5),4(a0)
  904.  
  905.  move.b 6(a6),d0
  906.  add.b d0,damagetaken(a5)
  907.  
  908.  move.w tempxdir,d1
  909.  ext.l d1
  910.  asl.l #3,d1
  911.  swap d1
  912.  move.w d1,ImpactX(a5)
  913.  move.w tempzdir,d1
  914.  ext.l d1
  915.  asl.l #3,d1
  916.  swap d1
  917.  move.w d1,ImpactZ(a5)
  918.  
  919.  rts
  920.  
  921. PLR2MISSINSTANT: 
  922.  
  923.  move.w PLR2_xoff,oldx
  924.  move.w PLR2_zoff,oldz
  925.  move.l PLR2_yoff,d1
  926.  add.l #20*128,d1
  927.  move.l d1,oldy
  928.  
  929.  move.w (a5),d0
  930.  move.l ObjectPoints,a1
  931.  move.w (a1,d0.w*8),d2
  932.  sub.w oldx,d2
  933.  asr.w #1,d2
  934.  add.w oldx,d2
  935.  move.w d2,newx
  936.  move.w 4(a1,d0.w*8),d2
  937.  sub.w oldz,d2
  938.  asr.w #1,d2
  939.  add.w oldz,d2
  940.  move.w d2,newz
  941.  move.w 4(a0),d2
  942.  ext.l d2
  943.  asl.l #7,d2
  944.  move.l d2,newy
  945.  
  946.  st exitfirst
  947.  clr.b wallbounce
  948.  move.w #0,extlen
  949.  move.b #$ff,awayfromwall
  950.  move.w #%0000010000000000,wallflags
  951.  move.l #0,StepUpVal
  952.  move.l #$1000000,StepDownVal
  953.  move.l #0,thingheight
  954.  move.l PLR2_Roompt,objroom
  955.  movem.l d0-d7/a0-a6,-(a7)
  956.  
  957. .again:
  958.  jsr MoveObject
  959.  tst.b hitwall
  960.  bne.s .nofurther
  961.  move.w newx,d1
  962.  sub.w oldx,d1
  963.  add.w d1,oldx
  964.  add.w d1,newx
  965.  move.w newz,d1
  966.  sub.w oldz,d1
  967.  add.w d1,oldz
  968.  add.w d1,newz
  969.  move.l newy,d1
  970.  sub.l oldy,d1
  971.  add.l d1,oldy
  972.  add.l d1,newy
  973.  bra .again
  974.  
  975. .nofurther:
  976.  
  977.  movem.l (a7)+,d0-d7/a0-a6
  978.  
  979.  move.l PlayerShotData,a0
  980.  move.w #19,d1
  981. .findonefree2
  982.  move.w 12(a0),d2
  983.  blt.s .foundonefree2
  984.  adda.w #64,a0
  985.  dbra d1,.findonefree2
  986.  
  987.  rts
  988.  
  989. .foundonefree2:
  990.  
  991.  move.l ObjectPoints,a1
  992.  move.w (a0),d2
  993.  move.w newx,(a1,d2.w*8)
  994.  move.w newz,4(a1,d2.w*8)
  995.  move.b #1,shotstatus(a0)
  996.  move.w #0,shotgrav(a0)
  997.  move.b p2_gunselected,shotsize(a0)
  998.  move.b #0,shotanim(a0)
  999.  
  1000.  move.l objroom,a1
  1001.  move.w (a1),12(a0)
  1002.  st worry(a0)
  1003.  move.l newy,d1
  1004.  move.l d1,accypos(a0)
  1005.  asr.l #7,d1
  1006.  move.w d1,4(a0)
  1007.  
  1008.  rts
  1009.